home *** CD-ROM | disk | FTP | other *** search
- PROGRAM walpaper;
-
- {$I graph.p}
-
- TYPE
- picrec = ARRAY[1..17000] OF Char;
- filename = STRING[12];
-
- VAR
- parmchoice, reschoice, choice : Char;
- corna, cornb, side, ci, cj, cc, cp, pp,
- setter, color, cz, s, xp, yp : Integer;
- i, k, num, a, b, c, xx, yy, x, y, z : Real;
- savefilename, showfilename : filename;
- savefile, showfile : FILE OF picrec;
- runc, wait, okay, parms, highres : Boolean;
- picture, picturesave, pictureshow : picrec;
-
- PROCEDURE filecheck(VAR filetocheck : filename);
- {check for file's existance, returns okay true
- if file exists}
- VAR
- ckfile : Text; {defines file as variable for use by filecheck}
- BEGIN
- Assign(ckfile, filetocheck);
- {$I-} Reset(ckfile) {$I+} ;
- okay := (IOResult = 0);
- IF okay THEN Close(ckfile);
- END;
-
- PROCEDURE Low;
- BEGIN
- GraphColorMode;
- Palette(color);
- END;
-
- PROCEDURE High;
- BEGIN
- HiRes;
- HiResColor(color);
- END;
-
- PROCEDURE Setcolor;
- BEGIN
- ClrScr;
- IF highres THEN BEGIN
- TextMode(C80);
- GoToXY(10, 5);
- Write('In High resolution only one color may be chosen from below');
- GoToXY(10, 6); Write(' the background color will always be black');
- GoToXY(1, 9); TextColor(15); Write('0 . . . . . Black (useless)');
- GoToXY(1, 10); TextColor(1); Write('1 . . . . . Blue');
- GoToXY(1, 11); TextColor(2); Write('2 . . . . . Green');
- GoToXY(1, 12); TextColor(3); Write('3 . . . . . Cyan');
- GoToXY(1, 13); TextColor(4); Write('4 . . . . . Red');
- GoToXY(1, 14); TextColor(5); Write('5 . . . . . Magenta');
- GoToXY(1, 15); TextColor(6); Write('6 . . . . . Brown');
- GoToXY(1, 16); TextColor(7); Write('7 . . . . . Light Gray');
- GoToXY(40, 9); TextColor(8); Write('8 . . . . . Dark Gray');
- GoToXY(40, 10); TextColor(9); Write('9 . . . . . Light Blue');
- GoToXY(40, 11); TextColor(10); Write('10 . . . . . Light Green');
- GoToXY(40, 12); TextColor(11); Write('11 . . . . . Light Cyan');
- GoToXY(40, 13); TextColor(12); Write('12 . . . . . Light Red');
- GoToXY(40, 14); TextColor(13); Write('13 . . . . . Light Magenta');
- GoToXY(40, 15); TextColor(14); Write('14 . . . . . Yellow');
- GoToXY(40, 16); TextColor(15); Write('15 . . . . . White');
- GoToXY(1, 18); TextColor(3); Write('Choose a color: ');
- ReadLn(color);
- END;
- IF NOT(highres) THEN BEGIN
- TextMode(C80);
- GoToXY(10, 5);
- WriteLn('In Low resolution mode you have 4 combinations of colors, any of');
- GoToXY(10, 6);
- WriteLn(' of the 4 combinations may be chosen');
- GoToXY(1, 9); Write(' # ');
- GoToXY(5, 9); Write(' background ');
- GoToXY(25, 9); Write(' color 1 ');
- GoToXY(45, 9); Write(' color 2 ');
- GoToXY(65, 9); Write(' color 3 ');
- GoToXY(1, 10); TextColor(3); Write(' 0 ');
- GoToXY(5, 10); TextColor(0); Write(' background ');
- GoToXY(25, 10); TextColor(2); Write(' green ');
- GoToXY(45, 10); TextColor(4); Write(' red ');
- GoToXY(65, 10); TextColor(6); Write(' brown ');
- GoToXY(1, 11); TextColor(3); Write(' 1 ');
- GoToXY(5, 11); TextColor(0); Write(' background ');
- GoToXY(25, 11); TextColor(3); Write(' cyan ');
- GoToXY(45, 11); TextColor(5); Write(' magenta ');
- GoToXY(65, 11); TextColor(7); Write(' light gray ');
- GoToXY(1, 12); TextColor(3); Write(' 2 ');
- GoToXY(5, 12); TextColor(0); Write(' background ');
- GoToXY(25, 12); TextColor(10); Write(' light green ');
- GoToXY(45, 12); TextColor(12); Write(' light red ');
- GoToXY(65, 12); TextColor(14); Write(' yellow ');
- GoToXY(1, 13); TextColor(3); Write(' 3 ');
- GoToXY(5, 13); TextColor(0); Write(' background ');
- GoToXY(25, 13); TextColor(11); Write(' light cyan ');
- GoToXY(45, 13); TextColor(13); Write(' light magenta ');
- GoToXY(65, 13); TextColor(15); Write(' white ');
- GoToXY(1, 18); TextColor(3); Write('Choose a color combination: (0,1,2,3) ');
- ReadLn(color);
- END;
- END;
-
- PROCEDURE setparms;
- BEGIN
- WriteLn('Do you want the parameters displayed in the picture? (Y/N)');
- Read(Kbd, parmchoice);
- IF UpCase(parmchoice) = 'Y' THEN parms := True ELSE parms := False;
- END;
-
- PROCEDURE Setresolution;
- BEGIN
- WriteLn('Low res or High res graphics ? (H/L) ');
- Read(Kbd, reschoice);
- IF UpCase(reschoice) = 'H' THEN highres := True ELSE highres := False;
- END;
-
- PROCEDURE snapshot;
- BEGIN
- GetPic(picture, 0, 0, 639, 199);
- END;
-
- PROCEDURE Project;
- BEGIN
- IF highres THEN High ELSE Low;
- PutPic(picture, 0, 199);
- END;
-
- PROCEDURE Connetta;
- BEGIN
- REPEAT
- GoToXY(1, 20); ClrEol;
- Write('Value for corna ? ');
- {$I-} ReadLn(corna) {$I+} ;
- okay := (IOResult = 0);
- IF (-10000 > corna) OR (corna > 10000) THEN okay := False;
- UNTIL okay;
- END;
-
- PROCEDURE Connettb;
- BEGIN
- REPEAT
- GoToXY(1, 21); ClrEol;
- Write('Value for cornb ? ');
- {$I-} ReadLn(cornb) {$I+} ;
- okay := (IOResult = 0);
- IF (-10000 > cornb) OR (cornb > 10000) THEN okay := False;
- UNTIL okay;
- END;
-
- PROCEDURE Connettside;
- BEGIN
- REPEAT
- GoToXY(1, 22); ClrEol;
- Write('Value for side ? ');
- {$I-} ReadLn(side) {$I+} ;
- okay := (IOResult = 0);
- IF (-10000 > side) OR (side > 10000) THEN okay := False;
- UNTIL okay;
- END;
-
- PROCEDURE Inmartin1num;
- BEGIN
- REPEAT
- okay := True;
- GoToXY(1, 19); ClrEol;
- Write('Number of iterations to run ? ');
- ReadLn(num);
- UNTIL okay;
- END;
-
- PROCEDURE Inputmartin1a;
- BEGIN
- REPEAT
- GoToXY(1, 20); ClrEol;
- Write('Value for a ? ');
- {$I-} ReadLn(a) {$I+} ;
- okay := (IOResult = 0);
- IF (-10000 > a) OR (a > 10000) THEN okay := False;
- UNTIL okay;
- END;
-
- PROCEDURE Inputmartin1b;
- BEGIN
- REPEAT
- GoToXY(1, 21); ClrEol;
- Write('Value for b ? ');
- {$I-} ReadLn(b) {$I+} ;
- okay := (IOResult = 0);
- IF (-10000 > b) OR (b > 10000) THEN okay := False;
- UNTIL okay;
- END;
-
- PROCEDURE Inputmartin1c;
- BEGIN
- REPEAT
- GoToXY(1, 22); ClrEol;
- Write('Value for c ? ');
- {$I-} ReadLn(c) {$I+} ;
- okay := (IOResult = 0);
- IF (-10000 > c) OR (c > 10000) THEN okay := False;
- UNTIL okay;
- END;
-
- PROCEDURE fileit;
- VAR
- filechoice : Char;
- doit : Boolean;
- BEGIN
- picturesave := picture;
- REPEAT
- doit := True;
- GoToXY(1, 1); Write(' ');
- GoToXY(1, 1);
- Write('input filename: '); ReadLn(savefilename);
- IF savefilename <> '' THEN BEGIN
- filecheck(savefilename);
- IF okay THEN doit := False ELSE doit := True;
- IF doit = False THEN BEGIN
- GoToXY(1, 2); Write('File exists -- overwrite? (Y/N)');
- Read(Kbd, filechoice);
- IF UpCase(filechoice) = 'Y' THEN doit := True ELSE doit := False;
- GoToXY(1, 2); Write(' ');
- END;
- END;
- UNTIL doit;
- IF savefilename <> '' THEN BEGIN
- GoToXY(1, 2);
- Write('Saving file ');
- Assign(savefile, savefilename);
- Rewrite(savefile);
- Write(savefile, picturesave);
- Flush(savefile);
- Close(savefile);
- END;
- END;
-
- PROCEDURE showit;
- VAR
- doit : Boolean;
- BEGIN
- REPEAT
- GoToXY(1, 20); ClrEol;
- Write('input filename: '); ReadLn(showfilename);
- IF showfilename <> '' THEN BEGIN
- Filecheck(showfilename);
- IF NOT(okay) THEN doit := False ELSE doit := True;
- IF NOT(doit) THEN BEGIN
- GoToXY(1, 21);
- Write('File does not exist');
- END;
- END;
- UNTIL doit;
- IF showfilename <> '' THEN BEGIN
- Assign(showfile, showfilename);
- Reset(showfile);
- Read(showfile, pictureshow);
- picture := pictureshow;
- Close(showfile);
- IF Chr(1) = picture[1] THEN highres := True ELSE highres := False;
- Setcolor;
- Project;
- REPEAT UNTIL KeyPressed;
- END;
- END;
-
- PROCEDURE Endconnettdecision;
- BEGIN
- snapshot;
- Write(^G);
- GoToXY(1, 14);
- WriteLn('save and eXit');
- WriteLn('Quit (no save)');
- WriteLn('X,Q');
- Read(Kbd, choice);
- choice := UpCase(choice);
- IF (choice <> 'X') AND (choice <> 'Q') THEN choice := 'Q';
- CASE choice OF
- 'X' : BEGIN
- fileit;
- wait := False;
- END;
- 'Q' : BEGIN
- wait := False;
- END;
- END; {case choice of}
- END;
-
- PROCEDURE Endmartindecision;
- BEGIN
- snapshot;
- Write(^G);
- GoToXY(1, 14);
- WriteLn('save and eXit');
- WriteLn('Quit (no save)');
- WriteLn('X,Q');
- Read(Kbd, choice);
- choice := UpCase(choice);
- IF (choice <> 'X') AND (choice <> 'Q') THEN choice := 'Q';
- CASE choice OF
- 'X' : BEGIN
- fileit;
- i := num;
- wait := False;
- END;
- 'Q' : BEGIN
- i := num;
- wait := False;
- END;
- END; {case choice of}
- END;
-
- PROCEDURE Connettdecision;
- BEGIN
- snapshot;
- Write(^G);
- GoToXY(1, 14);
- WriteLn('Save and continue');
- WriteLn('Continue');
- WriteLn('save and eXit');
- WriteLn('Quit (no save)');
- WriteLn('S,C,X,Q');
- Read(Kbd, choice);
- choice := UpCase(choice);
- IF (choice <> 'S') AND (choice <> 'C') AND (choice <> 'X') AND
- (choice <> 'Q') THEN choice := 'C';
- CASE choice OF
- 'S' : BEGIN
- Fileit;
- Project;
- END;
- 'C' : Project;
- 'X' : BEGIN
- Fileit;
- runc := False;
- TextMode(C80); TextColor(3); WriteLn('Resetting');
- wait := False;
- END;
- 'Q' : BEGIN
- runc := False;
- TextMode(C80); TextColor(3); WriteLn('Resetting');
- wait := False;
- END;
- END; {case choice of}
- END;
-
- PROCEDURE Martindecision;
- BEGIN
- snapshot;
- Write(^G);
- GoToXY(1, 14);
- WriteLn('Save and continue');
- WriteLn('Continue');
- WriteLn('save and eXit');
- WriteLn('Quit (no save)');
- WriteLn('S,C,X,Q');
- Read(Kbd, choice);
- choice := UpCase(choice);
- IF (choice <> 'S') AND (choice <> 'C') AND (choice <> 'X') AND
- (choice <> 'Q') THEN choice := 'C';
- CASE choice OF
- 'S' : BEGIN
- Fileit;
- Project;
- END;
- 'C' : Project;
- 'X' : BEGIN
- Fileit;
- i := num;
- wait := False;
- END;
- 'Q' : BEGIN
- i := num;
- wait := False;
- END;
- END; {case choice of}
- END;
-
- PROCEDURE Plotlconnett;
- VAR
- ires, jres : Integer;
- BEGIN
- wait := True;
- runc := True;
- IF highres THEN BEGIN
- ires := 640;
- jres := 200;
- High;
- END ELSE BEGIN
- ires := 320;
- jres := 200;
- Low;
- END;
- IF parms THEN BEGIN
- GoToXY(65, 19); Write('Corna =', corna:5);
- GoToXY(65, 20); Write('Cornb =', cornb:5);
- GoToXY(65, 21); Write('Side =', side:5);
- END;
- FOR ci := 1 TO ires DO BEGIN
- FOR cj := 1 TO jres DO BEGIN
- IF runc THEN BEGIN
- x := corna+(side*ci/ires);
- y := cornb+(side*cj/jres);
- z := x*x+y*y;
- IF z > 10000 THEN k := Int(z/10000);
- IF z < 10000 THEN k := Int(z);
- cp := Trunc(k);
- cp := cp MOD 4;
- IF KeyPressed THEN Connettdecision;
- CASE cp OF
- 0 : Plot(ci, cj, 0);
- 1 : Plot(ci, cj, 1);
- 2 : Plot(ci, cj, 2);
- 3 : Plot(ci, cj, 3);
- END; {case of cp}
- END;
- END;
- END;
- IF wait THEN IF parms THEN BEGIN
- GoToXY(65, 19); Write('Corna =', corna:5);
- GoToXY(65, 20); Write('Cornb =', cornb:5);
- GoToXY(65, 21); Write('Side =', side:5);
- END;
- IF wait THEN Endconnettdecision;
- END;
-
- PROCEDURE Plotmartin1;
- VAR
- setting : Integer;
- BEGIN
- IF highres THEN High ELSE Low;
- yp := 0;
- xp := 0;
- x := 0;
- y := 0;
- i := 0;
- IF parms THEN BEGIN
- GoToXY(65, 19); Write('Num =', num:8:0);
- GoToXY(65, 20); Write('A =', a:5:3);
- GoToXY(65, 21); Write('B =', b:5:3);
- GoToXY(65, 22); Write('C =', c:5:3);
- END;
- setting := 1;
- REPEAT
- wait := True;
- i := i+1;
- IF parms THEN BEGIN
- GoToXY(70, 23);
- Write((num-i):8:0);
- END;
- IF highres THEN Plot(xp+320, yp+100, 1) ELSE Plot(xp+160, yp+100, setting);
- IF x > 0 THEN s := 1;
- IF x = 0 THEN s := 0;
- IF x < 0 THEN s := -1;
- xx := y-(s*Sqrt(Abs(b*x-c)));
- yy := (a)-x;
- x := xx;
- y := yy;
- xp := (Trunc(x));
- yp := (Trunc(y));
- IF i > 10000 THEN setter := Trunc(i/10000) ELSE setter := Trunc(i/100);
- IF Odd(setter) THEN setting := 2 ELSE setting := 1;
- IF KeyPressed THEN Martindecision;
- UNTIL i = num;
- IF wait THEN REPEAT UNTIL KeyPressed;
- IF wait THEN Endmartindecision;
- END;
-
- PROCEDURE Connettstartup;
- BEGIN
- ClrScr;
- Setparms;
- Setresolution;
- Setcolor;
- Connetta;
- Connettb;
- Connettside;
- END;
-
- PROCEDURE Martin1startup;
- BEGIN
- ClrScr;
- Setparms;
- Setresolution;
- Setcolor;
- Inmartin1num;
- Inputmartin1a;
- Inputmartin1b;
- Inputmartin1c;
- END;
-
- PROCEDURE Connettmenu;
- BEGIN
- REPEAT
- ClrScr;
- WriteLn;
- WriteLn;
- WriteLn;
- WriteLn(' Press the space bar to begin viewing selection, or ');
- WriteLn;
- WriteLn('Reset corna . . . . . . . . . . . . . . . . . . . . 1');
- WriteLn('Reset cornb . . . . . . . . . . . . . . . . . . . . 2');
- WriteLn('Reset side . . . . . . . . . . . . . . . . . . . . 3');
- WriteLn('Reset resolution and colors . . . . . . . . . . . . 5');
- WriteLn('Toggle parameter display . . . . . . . . . . . . . 6');
- WriteLn('Display saved picture . . . . . . . . . . . . . . . 8');
- WriteLn('Reset all values . . . . . . . . . . . . . . . . . 9');
- WriteLn('Quit . . . . . . . . . . . . . . . . . . . . . . . 0');
- Read(Kbd, choice);
- CASE choice OF
- '0' : choice := '0';
- '1' : Connetta;
- '2' : Connettb;
- '3' : Connettside;
- '5' : BEGIN
- Setresolution;
- Setcolor;
- END;
- '6' : IF NOT(parms) THEN parms := True ELSE parms := False;
- '8' : showit;
- '9' : Connettstartup;
- END; {case choice of}
- IF (choice <> '0') AND (choice <> '8') THEN Plotlconnett;
- UNTIL choice = '0';
- choice := 'X';
- END;
-
- PROCEDURE Martin1menu;
- BEGIN
- REPEAT
- ClrScr;
- WriteLn;
- WriteLn;
- WriteLn;
- WriteLn(' Press the space bar to begin viewing selection, or ');
- WriteLn;
- WriteLn('Reset number of iterations . . . . . . . . . . . . 1');
- WriteLn('Reset a . . . . . . . . . . . . . . . . . . . . . . 2');
- WriteLn('Reset b . . . . . . . . . . . . . . . . . . . . . . 3');
- WriteLn('Reset c . . . . . . . . . . . . . . . . . . . . . . 4');
- WriteLn('Reset resolution and colors . . . . . . . . . . . . 5');
- WriteLn('Toggle parameter display . . . . . . . . . . . . . 6');
- WriteLn('Display saved picture . . . . . . . . . . . . . . . 8');
- WriteLn('Reset all values . . . . . . . . . . . . . . . . . 9');
- WriteLn('Quit . . . . . . . . . . . . . . . . . . . . . . . 0');
- Read(Kbd, choice);
- CASE choice OF
- '0' : choice := '0';
- '1' : Inmartin1num;
- '2' : Inputmartin1a;
- '3' : Inputmartin1b;
- '4' : Inputmartin1c;
- '5' : BEGIN
- Setresolution;
- Setcolor;
- END;
- '6' : IF NOT(parms) THEN parms := True ELSE parms := False;
- '8' : showit;
- '9' : Martin1startup
- END; {case choice of}
- IF (choice <> '0') AND (choice <> '8') THEN Plotmartin1;
- UNTIL choice = '0';
- choice := 'X';
- END;
-
- PROCEDURE Startscreen;
- BEGIN
- ClrScr;
- TextMode(C80);
- GoToXY(20, 5); TextColor(4);
- Write('WALLPAPER FOR THE MIND');
- GoToXY(1, 7); TextColor(6);
- Write('A display of some of the designs mentioned "Computer Recreations")');
- GoToXY(1, 8);
- Write('by A.K. Dewdney; algorithms from J.E. Connett and B. Martin ');
- GoToXY(1, 9);
- Write('"Scientific American" Vol 255 No. 3; September 1986');
- GoToXY(1, 14); TextColor(3);
- Write('Public Domain -- may be copied and distributed ');
- GoToXY(1, 24); TextColor(3);
- Write('Press any key to continue . . .');
- REPEAT UNTIL KeyPressed;
- END;
-
- PROCEDURE Menu;
- BEGIN
- ClrScr;
- WriteLn('Choose one of the following:');
- WriteLn('Connett''s Algorithm . . . . . . . 1');
- WriteLn('Martin''s Algorithm . . . . . . . 2');
- WriteLn('Display stored picture . . . . . 9');
- WriteLn('Quit . . . . . . . . . . . . . . 0');
- Read(Kbd, choice);
- CASE choice OF
- '1' : BEGIN
- Connettstartup;
- Connettmenu;
- END;
- '2' : BEGIN
- Martin1startup;
- Martin1menu;
- END;
- '9' : showit;
- '0' : choice := '0';
- END; {case choice of}
- END;
-
- BEGIN {main program starts here}
- showfilename := '';
- savefilename := '';
- FOR cz := 1 TO 17000 DO BEGIN
- picture[cz] := Chr(0);
- picturesave[cz] := Chr(0);
- pictureshow[cz] := Chr(0);
- END;
- choice := '0';
- Startscreen;
- REPEAT
- Menu;
- UNTIL choice = '0';
- TextMode(C80);
- END.
-